#ifndef LIGHT_CONTAINERS_H
#define LIGHT_CONTAINERS_H

#include <glm.hpp>
using namespace glm;

#define DS_LIGHTS_PER_PASS 8

typedef struct {
	vec3 color[DS_LIGHTS_PER_PASS];
	vec3 position[DS_LIGHTS_PER_PASS];

	float cutoffFar[DS_LIGHTS_PER_PASS];
	float fadeFar[DS_LIGHTS_PER_PASS];
	unsigned int numLights;
} ds_point_light_batch;

typedef struct {
	vec3 color[DS_LIGHTS_PER_PASS];
	vec3 direction[DS_LIGHTS_PER_PASS];

	unsigned int numLights;
} ds_directional_light_batch;

typedef struct {
	vec3 color[DS_LIGHTS_PER_PASS];
	vec3 position[DS_LIGHTS_PER_PASS];
	vec3 direction[DS_LIGHTS_PER_PASS];

	float half_angle_cos[DS_LIGHTS_PER_PASS];

	float cutoff_far[DS_LIGHTS_PER_PASS];
	float fade_far[DS_LIGHTS_PER_PASS];

	unsigned int numLights;
} ds_spot_light_batch;

typedef struct {
	vec3 color;
	vec3 position;

	float cutoff_far;
	float fade_far;
} ds_point_light;

typedef struct {
	vec3 color;
	vec3 direction;
} ds_directional_light;

typedef struct {
	vec3 color;
	vec3 position;
	vec3 direction;

	float half_angle_cos;

	float cutoff_far;
	float fade_far;
} ds_spot_light;

typedef struct {
	float *direction;
	float *color;
	unsigned int *number;
} ds_directional_light_device;

typedef struct {
	void *d_pointLightScissorRects;
	void *d_pointLightFloats;
	unsigned int numPointLights;
} ds_point_light_device;

#endif // #ifndef LIGHT_CONTAINERS_H